package 反射;
/*
@Date:2025/3/17
*/

import java.lang.reflect.Field;

public class TestCarFanShe {

    public static void main(String[] args) throws Exception {
        String classAllPath = "反射.Car";
        //获取car类对象堆中的class对象
        final Class<?> aClass = Class.forName(classAllPath);
        System.out.println("aClass = " + aClass);
        System.out.println("aClass.getClass() = " + aClass.getClass());
        System.out.println("aClass.getPackage().getName() = " + aClass.getPackage().getName());
        Car car =(Car)aClass.newInstance();
        System.out.println("car = " + car);
//通过反射获取属性
        final Field brand = aClass.getField("brand");
        System.out.println("brand.get(car) = " + brand.get(car));
//全部
        final Field[] fields = aClass.getFields();
        for (Field f:fields
             ) {
            System.out.println("f.getName() = " + f.getName());
            System.out.println("f.get(car) = " + f.get(car));
        }
        System.out.println("-----获取反射类对象方法------");
        final Car car1 = new Car();//硬编码
        final Class<? extends Car> aClass1 = car1.getClass();
        System.out.println("aClass1 = " + aClass1);
        //通过class属性获取
        System.out.println("Car.class = " + Car.class);
        //通过类加载器

        final ClassLoader classLoader = car1.getClass().getClassLoader();
        //这一行代码获取 car1 对象的 ClassLoader。通过 car1.getClass() 可以获取 car1 对象的 Class 对象，然后使用 .getClassLoader() 获取该类的 ClassLoader。
        final Class<?> aClass2 = classLoader.loadClass(classAllPath);
        //这一行代码通过 classLoader.loadClass(classAllPath) 动态加载指定的类。classAllPath 是一个字符串，表示类的全限定名（例如 "com.example.MyClass"）。该方法会尝试加载这个类，并返回一个 Class<?> 对象。
        System.out.println("aClass2 = " + aClass2);


    }

}
